LaTeX
Thứ Tư, 05/07/2017, 00:07
Tikz package - [Kỳ 2] Vẽ đồ thị và sử dụng vòng lặp trong TikZ

Tikz package - [Kỳ 2] Vẽ đồ thị và sử dụng vòng lặp trong TikZ

Ở bài viết trước chúng ta đã làm quen với các lệnh vẽ cơ bản trong gói TikZ. Thật ra với những lệnh vẽ cơ bản đó chúng ta đã có thể vẽ được rất nhiều hình phức tạp khác nhau.
Bài viết này sẽ giới thiệu thêm 2 lệnh vẽ nâng cao hơn là vẽ đồ thị hàm sốvẽ hình sử dụng vòng lặp. Qua các ví dụ, bạn cũng sẽ biết thêm một số tính năng tùy biến thú vị của TikZ.

Vẽ đồ thị của hàm số

Ta dùng lệnh \draw plot (\x, {hàm số});  để vẽ đồ thị hàm số. Giả sử ta cần vẽ đồ thị hàm số trên miền , ta thực hiện như sau
\begin{tikzpicture} \draw [<->] (0,2)--(0,0)--(7,0); % Hệ trục tọa độ \draw [domain=0:2*pi, blue,] plot (\x, {sin(\x r)}); \end{tikzpicture}
 
Hai điểm quan trọng khi vẽ đồ thị là biểu thức và miền giá trị. Trong lệnh vẽ trên, hàm số được thể hiện bằng biểu thức sin(\x r). 
Chữ r theo sau \x quy định rằng có đơn vị là radian, nếu không có chữ r thì TikZ sẽ hiểu có đơn vị là độ. Miền giá trị của nằm trong đoạn  được thể hiện bằng tùy biến domain=0:2*pi
Ngoài chút phức tạp về đơn vị đối với các hàm lượng giác, những hàm số còn lại hoàn toàn có thể biểu diễn bình thường, giống như khi tính toán trên Matlab, bạn chỉ việc thay bằng \x. TikZ hỗ trợ rất nhiều hàm toán học:
  • sqrt(\x) Hàm căn bậc hai
  • pow(\x, y) Hàm mũ
  • sin(\x r), cos(\x r), tan(\x r) Các hàm lượng giác
  • exp(\x) Hàm
  • ln(\x) Hàm
  • round(\x), floor(\x), ceil(\x) Các hàm làm tròn
  • min(\x, y), max(\x, y)
  • pi, e Các hằng số toán học
 
Sau đây là một ví dụ đơn giản khác
\begin{tikzpicture}[domain=0:4] \draw[thin,color=gray!50] (-0.1,-1.1) grid (3.9,3.9); \draw[->] (-0.2,0) -- (4.2,0) node[right] {$x$}; \draw[->] (0,-1.2) -- (0,4.2) node[above] {$f(x)$}; \draw[color=red] plot (\x,\x) node[right] {$f(x)= x$}; \draw[color=blue] plot (\x,{sin(\x r)}) node[right] {$f(x)= \sin x$}; \draw[color=orange] plot (\x,{0.05*exp(\x)}) node[right] {$f(x)= \frac{1}{20} e^x$}; \end{tikzpicture}
 
Câu lệnh \draw[thin,color=gray!50] (-0.1,-1.1) grid (3.9,3.9);  tạo một lưới cân đối và đẹp mắt cho hình vẽ chứa đồ thị.
notion image
 

Vẽ hình sử dụng vòng lặp

Cú pháp sử dụng rất đơn giản, hãy theo dõi ví dụ dưới đây để xem chúng hoạt động như thế nào. Giả sử bạn cần vẽ trục số , trên đó sẽ đánh dấu các điểm từ 0 đến 10. Cách thứ nhất là vẽ và đánh số thủ công lần lượt như sau:
\begin{tikzpicture} \draw [->] (-1,0) --(11,0) node [below] {$x$}; \draw (0,0.1)--(0,-0.1) node [below] {0}; \draw (1,0.1)--(1,-0.1) node [below] {1}; \draw (2,0.1)--(2,-0.1) node [below] {2}; \draw (3,0.1)--(3,-0.1) node [below] {3}; \draw (4,0.1)--(4,-0.1) node [below] {4}; \draw (5,0.1)--(5,-0.1) node [below] {5}; \draw (6,0.1)--(6,-0.1) node [below] {6}; \draw (7,0.1)--(7,-0.1) node [below] {7}; \draw (8,0.1)--(8,-0.1) node [below] {8}; \draw (9,0.1)--(9,-0.1) node [below] {9}; \draw (10,0.1)--(10,-0.1) node [below] {10}; \end{tikzpicture}
 
Tuy nhiên bằng cách sử dụng vòng lặp đơn giản bạn có thể làm điều này đỡ vất vả hơn
notion image
\begin{tikzpicture} \draw [->] (-1,0) --(11,0) node [below] {$x$}; \foreach \x in {0,1,2,3,4,5,6,7,8,9,10} \draw (\x,0.1)--(\x,-0.1) node [below] {\x}; \end{tikzpicture}
 
(Lệnh \foreach  có nghĩa là for each, cho bạn nào chưa biết). Kết quả hoàn toàn tương tự Nếu bạn muốn bỏ đi đoạn [0,2] thì có thể thực hiện như sau
notion image
\begin{tikzpicture} \draw [->] (-1,0) --(11,0) node [below] {$x$}; \foreach \x in {0,1,2,3,4,5,6,7,8,9,10} \draw (\x,0.1)--(\x,-0.1) node [below] {\x}; \foreach \x in {0.3, 0.5, 0.7, 0.9, 1.1, 1.3, 1.5, 1.7, 1.9} \draw (\x,0.1)--(\x-0.2,-0.1); \end{tikzpicture}
 
TikZ còn cho phép ta lặp với từng cặp biến. Giả sử ta cần vẽ bảng sau Ta chỉ cần dùng vòng lặp đơn giản sau, thay vì dùng lệnh \draw  cho từng chữ cái
notion image
\begin{tikzpicture} \draw (0,0) grid (12,1); % Vẽ lưới có điểm dưới-trái là (0,0) và điểm trên-phải là (12,1) \foreach \x / \chucai in {1/L, 2/A, 3/T, 4/E, 5/X, 6/M, 7/A, 8/T, 9/H, 10/2, 11/I, 12/T} \draw (\x-0.5, 0.5) node{\chucai}; \end{tikzpicture}
 
\x nhận các giá trị nên trong lệnh vẽ ta đã trừ bớt 0.5cm để điểm vẽ ra nằm ngay trung tâm của các ô. Lệnh trên cũng có sử dụng node để tạo chú thích, bạn sẽ được học thêm cách sử dụng node chi tiết hơn ở bài sau (Kỳ 3) Ví dụ khác về vòng lặp sử dụng 2 biến: Vẽ một hình ca-rô 4 màu như hình sau
notion image
\documentclass{article} \usepackage{tikz} \definecolor{MicrosoftRed}{HTML}{f65314} \definecolor{MicrosoftBlue}{HTML}{00a1f1} \definecolor{MicrosoftGreen}{HTML}{7cbb00} \definecolor{MicrosoftYellow}{HTML}{ffbb00} \begin{document} \begin{tikzpicture} \foreach \y in {0,2,4,6}{ \foreach \x in {0,2,4,6}{ \fill[MicrosoftBlue] (\x,\y) rectangle (\x+1,\y+1); \fill[MicrosoftRed] (\x,\y+1) rectangle (\x+1,\y+2); \fill[MicrosoftYellow](\x+1,\y) rectangle (\x+2,\y+1); \fill[MicrosoftGreen] (\x+1,\y+1) rectangle (\x+2,\y+2); }} \end{tikzpicture} \end{document}
 

Kết

Trên đây là cách sử dụng vòng lặp trong TikZ và cách sử dụng TikZ để vẽ đồ thị hàm số. Bài viết tiếp theo sẽ trình bày các cách sử dụng node và một số thủ thuật hữu ích để vẽ hình trong TikZ.
Cùng chủ đề